Adding patch to read/write doubles on arm.
authorBernd Zeimetz <bernd@bzed.de>
Tue, 20 Jan 2009 14:13:01 +0000 (15:13 +0100)
committerBernd Zeimetz <bernd@bzed.de>
Tue, 20 Jan 2009 14:13:01 +0000 (15:13 +0100)
debian/patches/arm_double_read_write [new file with mode: 0644]
debian/patches/series

diff --git a/debian/patches/arm_double_read_write b/debian/patches/arm_double_read_write
new file mode 100644 (file)
index 0000000..575e516
--- /dev/null
@@ -0,0 +1,45 @@
+c4b8e6f83f3e207ff57259307bdb4fc6e49b5881
+diff --git a/util.c b/util.c
+index 92fd724..3412d6b 100644
+--- a/util.c
++++ b/util.c
+@@ -968,8 +968,15 @@ endian_read_double(void* ptr, int read_le)
+         }
+         p = r;
+   }
+-  
++
++// Word order is different on arm, but not on arm-eabi.  
++#if defined(__arm__) && !defined(__ARM_EABI__)
++  memcpy(&ret, p + 4, 4);
++  memcpy(((void *)&ret) + 4, p, 4);
++#else
+   memcpy(&ret, p, 8);
++#endif
++
+   return ret;
+ }
+@@ -999,12 +1006,20 @@ endian_read_float(void* ptr, int read_le)
+ void
+ endian_write_double(void* ptr, double d, int write_le)
+ {
+-  char *r = (char *)(void *)&d;
+   int i;
+   char *optr = ptr;
++// Word order is different on arm, but not on arm-eabi.  
++#if defined(__arm__) && !defined(__ARM_EABI__)
++  char r[8];
++  memcpy( r + 4, &d, 4);
++  memcpy( r, ((void *)&d) + 4, 4);
++#else     
++  char *r = (char *)(void *)&d;
++#endif
++
+   if ( i_am_little_endian == write_le ) {
+-        memcpy( ptr, &d, 8);
++        memcpy( ptr, r, 8);
+   }
+   else {
+         for (i = 0; i < 8; i++)
index e4088a8554d8011d0b55e627979ee80aa18397dc..db8ed4eaf5267c98e7cb6002bc2a8a2392a41923 100644 (file)
@@ -1,2 +1,3 @@
 osm-char-int-cast-bug-fix
 no-gpsbabel-pdf
+arm_double_read_write